﻿using System;
using System.Collections.Generic;
using System.Text;
using Evolution.Common;

namespace TECassist
{
    public class Histo
    {
        private Int32 histoNúmero;
        private Int32 histoNúmOrdem;
        private DateTime histoData;
        private String histoTécnico;
        private Double histoValor;
        private String histoDescrição;
        private String histoMsgErro;
        private String sqlText;
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public Int32 Número
        {
            get { return histoNúmero; }
            set { histoNúmero = value; }
        }
        public Int32 NúmOrdem
        {
            get { return histoNúmOrdem; }
            set { histoNúmOrdem = value; }
        }
        public DateTime Data
        {
            get { return histoData; }
            set { histoData = value; }
        }
        public String Técnico
        {
            get { return histoTécnico; }
            set { histoTécnico = value; }
        }
        public String Descrição
        {
            get { return histoDescrição; }
            set { histoDescrição = value; }
        }
        public Double Valor
        {
            get { return histoValor; }
            set { histoValor = value; }
        }
        public String MsgErro
        {
            get { return histoMsgErro; }
            set { histoMsgErro = value; }
        }

        public Histo(Database thisDB)
        {
            this.DBase = thisDB;
        }

        public int Delete()
        {
            String cmdText = "DELETE from ordhisto WHERE (numero = '" + histoNúmero + "');";
            DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                histoMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            else return 0;
        }

        public int Insert()
        {
            int valHisto = (int)(histoValor * 100);
            String cmdText = "INSERT into ordhisto (ordem, data, tecnico, valor, descr) "
                    + " VALUES (" + histoNúmOrdem + ",'" + histoData.ToString("MM/dd/yyyy") + "','"
                    + histoTécnico + "', " + valHisto + ",'" + histoDescrição + "');";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                histoMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            cmdText = "SELECT MAX (numero) AS maximo FROM ordhisto;";
            object maxNumo = DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                histoMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            histoNúmero = Convert.ToInt32(maxNumo.ToString());
            return 0;
        }

        public int Obter()
        {
            String tabName = "histo";
            System.Data.DataSet sqlDataSet = new System.Data.DataSet();
            String cmdText = "SELECT * FROM ordhisto WHERE  (numero = " + histoNúmero + ");";
            sqlDataSet = DBase.ExecuteQuery(cmdText, tabName, out dbResult);
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                histoMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            System.Data.DataRow regDados = sqlDataSet.Tables[tabName].Rows[0];
            histoNúmOrdem = Convert.ToInt32(regDados["ordem"]);
            histoData = Convert.ToDateTime(regDados["data"]);
            histoTécnico = Convert.ToString(regDados["tecnico"]);
            histoValor = (Convert.ToDouble(regDados["valor"])) / 100;
            histoDescrição = Convert.ToString(regDados["descr"]);
            sqlDataSet.Dispose();
            return 0;
        }

    }

    public class OrçoBase
    {
        private Int32 orçoBaseNúmOrdem;
        private Int16 orçoBasePrazo;
        private Double orçoBaseMãoObra;
        private Double orçoBaseOutros;
        private String orçoBaseMsgErro;
        private String sqlText;
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public Int32 NúmOrdem
        {
            get { return orçoBaseNúmOrdem; }
            set { orçoBaseNúmOrdem = value; }
        }
        public Int16 Prazo
        {
            get { return orçoBasePrazo; }
            set { orçoBasePrazo = value; }
        }
        public Double MãoObra
        {
            get { return orçoBaseMãoObra; }
            set { orçoBaseMãoObra = value; }
        }
        public Double Outros
        {
            get { return orçoBaseOutros; }
            set { orçoBaseOutros = value; }
        }
        public String MsgErro
        {
            get { return orçoBaseMsgErro; }
            set { orçoBaseMsgErro = value; }
        }

        public OrçoBase(Database thisDB)
        {
            this.DBase = thisDB;
        }

        public int Insert()
        {
            int valMObra = (int)(orçoBaseMãoObra * 100);
            int valOutro = (int)(orçoBaseOutros * 100);
            String cmdText = "INSERT into orçtobase (ordem, prazo, mobra, outros) "
                    + " VALUES (" + orçoBaseNúmOrdem + "," + orçoBasePrazo + ","
                                  + valMObra + "," + valOutro + ");";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoBaseMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }

        public int Obter()
        {
            String tabName = "orçtobase";
            System.Data.DataSet sqlDataSet = new System.Data.DataSet();
            String cmdText = "SELECT * FROM orçtobase WHERE  (ordem = " + orçoBaseNúmOrdem + ");";
            sqlDataSet = DBase.ExecuteQuery(cmdText, tabName, out dbResult);
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoBaseMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            if (sqlDataSet.Tables[tabName].Rows.Count == 0) return 0;
            System.Data.DataRow regDados = sqlDataSet.Tables[tabName].Rows[0];
            orçoBasePrazo = Convert.ToInt16(regDados["prazo"]);
            orçoBaseMãoObra = (Convert.ToDouble(regDados["mobra"])) / 100;
            orçoBaseOutros = (Convert.ToDouble(regDados["outros"])) / 100;
            sqlDataSet.Dispose();
            return 1;
        }

        public int Update()
        {
            int valMObra = (int)(orçoBaseMãoObra * 100);
            int valOutro = (int)(orçoBaseOutros * 100);
            String cmdText = "UPDATE orçtobase SET prazo = " + orçoBaseNúmOrdem + ", mobra = "
                + valMObra + ", outros = " + valOutro + ";";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoBaseMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }
    }

    public class OrçoPeça
    {
        private Int32 orçoPeçaNúmero;
        private Int32 orçoPeçaNúmOrdem;
        private String orçoPeçaProduto;
        private Int32 orçoPeçaQuantidade;
        private String orçoPeçaMsgErro;
        private String sqlText;
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public Int32 Número
        {
            get { return orçoPeçaNúmero; }
            set { orçoPeçaNúmero = value; }
        }
        public Int32 NúmOrdem
        {
            get { return orçoPeçaNúmOrdem; }
            set { orçoPeçaNúmOrdem = value; }
        }
        public String Produto
        {
            get { return orçoPeçaProduto; }
            set { orçoPeçaProduto = value; }
        }
        public Int32 Quantidade
        {
            get { return orçoPeçaQuantidade; }
            set { orçoPeçaQuantidade = value; }
        }
        public String MsgErro
        {
            get { return orçoPeçaMsgErro; }
            set { orçoPeçaMsgErro = value; }
        }

        public OrçoPeça(Database thisDB)
        {
            this.DBase = thisDB;
        }

        public int Delete()
        {
            String cmdText = "DELETE from orçtopeças WHERE (numero = '" + orçoPeçaNúmero + "');";
            DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoPeçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            else return 0;
        }

        public int Existe(string Código)
        {
            String cmdText = "SELECT numero FROM orçtopeças WHERE (produto = '" + Código + "') LIMIT 1;";
            DBase.Connect();
            object queCód = DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoPeçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            if (queCód != null) return 1;
            else return 0;
        }

        public int Insert()
        {
            String cmdText = "INSERT into orçtopeças (ordem, produto, quantid) "
                    + " VALUES (" + orçoPeçaNúmOrdem + ",'" + orçoPeçaProduto + "'," + orçoPeçaQuantidade + ");";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoPeçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            cmdText = "SELECT MAX (numero) AS maximo FROM orçtopeças;";
            object maxNumo = DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoPeçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            orçoPeçaNúmero = Convert.ToInt32(maxNumo.ToString());
            return 0;
        }

        public int Obter()
        {
            String tabName = "orçtopeça";
            System.Data.DataSet sqlDataSet = new System.Data.DataSet();
            String cmdText = "SELECT * FROM orçtopeças WHERE  (numero = " + orçoPeçaNúmero + ");";
            sqlDataSet = DBase.ExecuteQuery(cmdText, tabName, out dbResult);
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoPeçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            System.Data.DataRow regDados = sqlDataSet.Tables[tabName].Rows[0];
            orçoPeçaProduto = Convert.ToString(regDados["produto"]);
            orçoPeçaQuantidade = Convert.ToInt32(regDados["quantid"]);
            sqlDataSet.Dispose();
            return 0;
        }

        public int SetCódigo(string novoCódigo)
        {
            String cmdText = "UPDATE orçtopeças SET produto = '" + novoCódigo
                + "' WHERE produto = '" + orçoPeçaProduto + "';";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                orçoPeçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }
    }

    public class Ordem
    {
        private Int32 ordemNúmero;
        private DateTime ordemData;
        private String ordemAtiva;
        private Int32 ordemCliente;
        private Int16 ordemSituação;
        private DateTime ordemFechto;
        private DateTime ordemGarantia;
        private String ordemProduto;
        private String ordemDefeito;
        private String ordemMsgErro;
        private String sqlText;
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public Int32 Número
        {
            get { return ordemNúmero; }
            set { ordemNúmero = value; }
        }
        public DateTime Data
        {
            get { return ordemData; }
            set { ordemData = value; }
        }
        public String Ativa
        {
            get { return ordemAtiva; }
            set { ordemAtiva = value; }
        }
        public Int32 Cliente
        {
            get { return ordemCliente; }
            set { ordemCliente = value; }
        }
        public Int16 Situação
        {
            get { return ordemSituação; }
            set { ordemSituação = value; }
        }
        public DateTime Fechto
        {
            get { return ordemFechto; }
            set { ordemFechto = value; }
        }
        public DateTime Garantia
        {
            get { return ordemGarantia; }
            set { ordemGarantia = value; }
        }
        public String Produto
        {
            get { return ordemProduto; }
            set { ordemProduto = value; }
        }
        public String Defeito
        {
            get { return ordemDefeito; }
            set { ordemDefeito = value; }
        }
        public String MsgErro
        {
            get { return ordemMsgErro; }
            set { ordemMsgErro = value; }
        }

        public Ordem(Database thisDB)
        {
            this.DBase = thisDB;
        }

        public int Insert()
        {
            String cmdText;
            cmdText = "INSERT into ordens (data, ativa, cliente, situaçao, fechto, garantia, produto, defeito) "
                    + " VALUES ('" + ordemData.ToString("MM/dd/yyyy") + "','S',"
                                   + ordemCliente + ", 0, '01/01/2001','01/01/2001','"
                                   + ordemProduto + "','" + ordemDefeito + "');";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                ordemMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            cmdText = "SELECT MAX (numero) AS maximo FROM ordens;";
            object maxNumo = DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                ordemMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            ordemNúmero = Convert.ToInt32(maxNumo.ToString());
            return 0;
        }

        public int Obter()
        {
            String tabName = "ordem";
            System.Data.DataSet sqlDataSet = new System.Data.DataSet();
            String cmdText = "SELECT * FROM ordens WHERE  (numero = " + ordemNúmero + ");";
            sqlDataSet = DBase.ExecuteQuery(cmdText, tabName, out dbResult);
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                ordemMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            System.Data.DataRow regDados = sqlDataSet.Tables[tabName].Rows[0];
            ordemAtiva = Convert.ToString(regDados["ativa"]);
            ordemCliente = Convert.ToInt32(regDados["cliente"]);
            ordemData = Convert.ToDateTime(regDados["data"]);
            ordemDefeito = Convert.ToString(regDados["defeito"]);
            ordemFechto = Convert.ToDateTime(regDados["fechto"]);
            ordemGarantia = Convert.ToDateTime(regDados["garantia"]);
            ordemProduto = Convert.ToString(regDados["produto"]);
            ordemSituação = Convert.ToInt16(regDados["situaçao"]);
            sqlDataSet.Dispose();
            return 0;
        }

        public int SetFechto()
        {
            String cmdText = "UPDATE ordens SET ativa = 'N', situaçao = 7, fechto = '"
                + ordemFechto.ToString("MM/dd/yyyy") + "', garantia = '" + ordemGarantia.ToString("MM/dd/yyyy") + "' "
                + "WHERE numero = " + ordemNúmero + ";";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                ordemMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }

        public int SetSitua()
        {
            String cmdText = "UPDATE ordens SET situaçao = " + ordemSituação + " WHERE numero = " + ordemNúmero + ";";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                ordemMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }

        public int Update()
        {
            String cmdText = "UPDATE ordens SET (produto = '" + ordemProduto + "', defeito = '"
                + ordemDefeito + "') WHERE numero = " + ordemNúmero + ";";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                ordemMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }
    }

    public class Peça
    {
        private Int32 peçaNúmero;
        private Int32 peçaNúmOrdem;
        private String peçaProduto;
        private Int32 peçaQuantidade;
        private String peçaMsgErro;
        private String sqlText;
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public Int32 Número
        {
            get { return peçaNúmero; }
            set { peçaNúmero = value; }
        }
        public Int32 NúmOrdem
        {
            get { return peçaNúmOrdem; }
            set { peçaNúmOrdem = value; }
        }
        public String Produto
        {
            get { return peçaProduto; }
            set { peçaProduto = value; }
        }
        public Int32 Quantidade
        {
            get { return peçaQuantidade; }
            set { peçaQuantidade = value; }
        }
        public String MsgErro
        {
            get { return peçaMsgErro; }
            set { peçaMsgErro = value; }
        }

        public Peça(Database thisDB)
        {
            this.DBase = thisDB;
        }

        public int Delete()
        {
            String cmdText = "DELETE from ordpeças WHERE (numero = '" + peçaNúmero + "');";
            DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                peçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            else return 0;
        }

        public int Existe(string Código)
        {
            String cmdText = "SELECT numero FROM ordpeças WHERE (produto = '" + Código + "') LIMIT 1;";
            DBase.Connect();
            object queCód = DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                peçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            if (queCód != null) return 1;
            else return 0;
        }

        public int Insert()
        {
            String cmdText = "INSERT into ordpeças (ordem, produto, quantid) "
                    + " VALUES (" + peçaNúmOrdem + ",'" + peçaProduto + "'," + peçaQuantidade + ");";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                peçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            cmdText = "SELECT MAX (numero) AS maximo FROM ordpeças;";
            object maxNumo = DBase.ExecuteScalar(cmdText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                peçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            peçaNúmero = Convert.ToInt32(maxNumo.ToString());
            return 0;
        }

        public int Obter()
        {
            String tabName = "peça";
            System.Data.DataSet sqlDataSet = new System.Data.DataSet();
            String cmdText = "SELECT * FROM ordpeças WHERE  (numero = " + peçaNúmero + ");";
            sqlDataSet = DBase.ExecuteQuery(cmdText, tabName, out dbResult);
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                peçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            System.Data.DataRow regDados = sqlDataSet.Tables[tabName].Rows[0];
            peçaProduto = Convert.ToString(regDados["produto"]);
            peçaQuantidade = Convert.ToInt32(regDados["quantid"]);
            sqlDataSet.Dispose();
            return 0;
        }

        public int SetCódigo(string novoCódigo)
        {
            String cmdText = "UPDATE ordpeças SET produto = '" + novoCódigo 
                + "' WHERE produto = '" + peçaProduto + "';";
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                peçaMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }
    }

    public class OrdValor
    {
        private Int32 valNúmero;
        private Double valDinho;
        private Double valCheque;
        private Double valOutros;
        private Double valTroco;
        private String valMsgErro;
        private String sqlText;
        private Double valObtido;
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public Int32 Número
        {
            get { return valNúmero; }
            set { valNúmero = value; }
        }
        public Double Dinho
        {
            get { return valDinho; }
            set { valDinho = value; }
        }
        public Double Cheque
        {
            get { return valCheque; }
            set { valCheque = value; }
        }
        public Double Outros
        {
            get { return valOutros; }
            set { valOutros = value; }
        }
        public Double Troco
        {
            get { return valTroco; }
            set { valTroco = value; }
        }
        public String MsgErro
        {
            get { return valMsgErro; }
            set { valMsgErro = value; }
        }

        public OrdValor(Database thisDB)
        {
            this.DBase = thisDB;
        }

        public int Totais()
        {
            sqlText = "SELECT SUM (valor) AS totvalor FROM credito WHERE (ordem = " + valNúmero
                + " AND tipo = 1);";
            int rotRet = rot_Totais();
            if (rotRet != 0) return rotRet;
            valCheque = valObtido / 100;
            sqlText = "SELECT SUM (valor) AS totvalor FROM credito WHERE (ordem = " + valNúmero
                + " AND tipo > 1);";
            rotRet = rot_Totais();
            if (rotRet != 0) return rotRet;
            valDinho = valObtido / 100;
            sqlText = "SELECT valor FROM caixa WHERE (ordem = " + valNúmero
                + " AND tipo = 0);";
            rotRet = rot_Totais();
            if (rotRet != 0) return rotRet;
            valOutros = valObtido / 100;
            sqlText = "SELECT valor FROM caixa WHERE (ordem = " + valNúmero
                + " AND tipo = 7);";
            rotRet = rot_Totais();
            if (rotRet != 0) return rotRet;
            valTroco = valObtido / 100;
            return 0;
        }

        private int rot_Totais()
        {
            object valPago = DBase.ExecuteScalar(sqlText, out dbResult);
            if (dbResult.Status == Database.Status.Failed)
            {
                valMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            try
            { valObtido = Convert.ToDouble(valPago.ToString()); }
            catch
            { valObtido = 0; }
            return 0;
        }
    }

    public class PeqRep
    {
        private Database DBase;
        Database.Result dbResult = new Database.Result();

        public PeqRep(Database thisDB)
        {
            this.DBase = thisDB;
        }

        private String sqlMsgErro;
        public String MsgErro
        {
            get { return sqlMsgErro; }
            set { sqlMsgErro = value; }
        }

        public int ExecutaSQL(String cmdText)
        {
            dbResult = DBase.ExecuteCommand(cmdText, RamaSoft.Common.Database.doNotUseTransaction);
            if (dbResult.Status == Database.Status.Failed)
            {
                sqlMsgErro = dbResult.ErrorMessage;
                return 7;
            }
            return 0;
        }
    }
}
